﻿using System;
using System.Linq;
using System.Windows.Forms;
using System.Xml.Linq;
using ConnectionBase;
using CoreEveprod;

namespace EveProd
{
	public partial class EditProfil : Form
	{
		DataClassesEveProdDataContext _dataContext = new DataClassesEveProdDataContext();

		public EditProfil()
		{
			InitializeComponent();
			ChargementListStations();
			openFileDialogEditProfil.FileOk += new System.ComponentModel.CancelEventHandler(openFileDialogEditProfil_FileOk);
		}

		/// <summary>
		/// Met dans les comboBox, toutes les Regions.
		/// </summary>
		private void ChargementListStations()
		{
			// Je récupère tout les noms de Région.
			var regions = (from reg in _dataContext.Regions
						   orderby reg.NomRegion
						   select reg.NomRegion);

			// Et les ajoutes aux 2 ComboBox.
			foreach (var region in regions)
			{
				if (region == "Unknown") continue;
				comboBoxAchatRegion.Items.Add(region);
				comboBoxVenteRegion.Items.Add(region);
			}
		}

		private void buttonQuitterEditProfil_Click(object sender, EventArgs e)
		{
			Close();
		}

		/// <summary>
		/// Bouton Ouvrir... Ouvre un Profil.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void buttonOuvrirProfil_Click(object sender, EventArgs e)
		{
			openFileDialogEditProfil.ShowDialog();
		}
		void openFileDialogEditProfil_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
		{
			try
			{
				// Je lis le fichier XML.
				ProfilProvider.ChargerProfil(XElement.Load(openFileDialogEditProfil.FileName));
				// Et affecte les valeurs dans les controleurs.
				textBoxEditNomProfil.Text = ProfilProvider.GetProfil().NomProfil;
				comboBoxEditIndustry.SelectedIndex = ProfilProvider.GetProfil().SkillIndustry;
				comboBoxEditProdEff.SelectedIndex = ProfilProvider.GetProfil().SkillProdEfficiency;
				string stationAchat = ProfilProvider.GetProfil().StationAchat;
				string stationVente = ProfilProvider.GetProfil().StationVente;
				
				// Je récupère les données pour mettre la région, système et station d'Achat.
				if (stationAchat != "")
				{
					try
					{
						var temp = (from gg in _dataContext.Stations
						            where gg.IdStation == Convert.ToInt32(stationAchat)
						            select new
						                   	{
						                   		regionAchat = gg.Regions.NomRegion,
						                   		systemeAchat = gg.Systemes.NomSystem,
						                   		stationAchat = gg.NomStation
						                   	}).First();

						comboBoxAchatRegion.Text = temp.regionAchat;
						comboBoxAchatSystem.Text = temp.systemeAchat;
						comboBoxAchatStation.Text = temp.stationAchat;
					}
					catch(Exception)
					{
						MessageBox.Show(
							"Une erreur s'est produite lors du chargement des informations pour la station d'Achat. Fichier corrompu",
							"Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
					}
				}

				// Je fais de même pour la station de Vente.
				if (stationVente != "")
				{
					try
					{
						var temp = (from gg in _dataContext.Stations
						            where gg.IdStation == Convert.ToInt32(stationVente)
						            select new
						                   	{
						                   		region = gg.Regions.NomRegion,
						                   		systeme = gg.Systemes.NomSystem,
						                   		station = gg.NomStation
						                   	}).First();

						comboBoxVenteRegion.Text = temp.region;
						comboBoxVenteSystem.Text = temp.systeme;
						comboBoxVenteStation.Text = temp.station;
					}
					catch(Exception)
					{
						MessageBox.Show(
							"Une erreur s'est produite lors du chargement des informations pour la station de Vente. Fichier corrompu",
							"Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
					}
				}

				// J'active les controleurs.
				comboBoxEditIndustry.Enabled = true;
				comboBoxEditProdEff.Enabled = true;
				panelAchat.Enabled = true;
				panelVente.Enabled = true;
				buttonSaveEditProfil.Enabled = true;
			}
			catch(Exception)
			{
				MessageBox.Show("Erreur dans le fichier XML \n Veuillez charger un autre fichier.", "Erreur", MessageBoxButtons.OK,
				                MessageBoxIcon.Error);
			}
		}

		/// <summary>
		/// Sauvegarde des paramètres des ComboBox, du fichier en cours.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void buttonSaveEditProfil_Click(object sender, EventArgs e)
		{
			// Je vais prendre les ID des stations de vente et achat.
			string idVente = "";
			string idAchat = "";

			if (comboBoxVenteStation.Text != "")
			{
				idVente = (from gg in _dataContext.Stations
						   where gg.NomStation == comboBoxVenteStation.Text
						   select gg.IdStation).First().ToString();
			}
			if (comboBoxAchatStation.Text != "")
			{
				idAchat = (from gg in _dataContext.Stations
						   where gg.NomStation == comboBoxAchatStation.Text
						   select gg.IdStation).First().ToString();
			}

			ProfilProvider.CreateProfil(comboBoxEditIndustry.SelectedIndex,comboBoxEditProdEff.SelectedIndex,textBoxEditNomProfil.Text, idVente, idAchat);
			ProfilProvider.SauvegarderProfil();
			Close();
		}

		#region Mise à jour comboBoX
		/// <summary>
		/// Mise à jour de la liste Système par rapport à la région.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void comboBoxAchatRegion_SelectedIndexChanged(object sender, EventArgs e)
		{
			string regionSelectionne = comboBoxAchatRegion.Text;

			// Je récupère l'id de la Région.
			var idRegion = (from region in _dataContext.Regions
							where region.NomRegion == regionSelectionne
							select region.IdRegion).First();

			// Je récupère les systèmes correspondant à la région sélectionné.
			var system = (from syst in _dataContext.Systemes
						  where syst.IdRegion == idRegion
						  orderby syst.NomSystem
						  select syst.NomSystem);

			comboBoxAchatSystem.Items.Clear();
			comboBoxAchatSystem.Text = "";

			// Je les ajoutes dans le comboxBoxSystem
			foreach (var nomSysteme in system)
			{
				comboBoxAchatSystem.Items.Add(nomSysteme);
			}

		}

		/// <summary>
		/// Méthode qui met à jour le comboxAchatStation.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void comboBoxAchatSystem_SelectedIndexChanged(object sender, EventArgs e)
		{
			// Je récupère l'ID du système choisi.
			var idSysteme = (from syst in _dataContext.Systemes
							 where syst.NomSystem == comboBoxAchatSystem.Text
							 select syst.IdSystem).First();

			// Je vais chercher les Stations liés à ce système.
			var stations = (from station in _dataContext.Stations
							where station.IdSystem == idSysteme
							orderby station.NomStation
							select station.NomStation);

			comboBoxAchatStation.Items.Clear();
			comboBoxAchatStation.Text = "";

			foreach (var station in stations)
			{
				comboBoxAchatStation.Items.Add(station);
			}
		}

		/// <summary>
		/// Méthode qui met à jour le comboxVenteSystems.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void comboBoxVenteRegion_SelectedIndexChanged(object sender, EventArgs e)
		{
			string regionSelectionne = comboBoxVenteRegion.Text;

			// Je récupère l'id de la Région.
			var idRegion = (from region in _dataContext.Regions
							where region.NomRegion == regionSelectionne
							select region.IdRegion).First();

			// Je récupère les systèmes correspondant à la région sélectionné.
			var system = (from syst in _dataContext.Systemes
						  where syst.IdRegion == idRegion
						  orderby syst.NomSystem
						  select syst.NomSystem);

			comboBoxVenteSystem.Items.Clear();
			comboBoxVenteSystem.Text = "";

			// Je les ajoutes dans le comboxBoxSystem
			foreach (var nomSysteme in system)
			{
				comboBoxVenteSystem.Items.Add(nomSysteme);
			}
		}

		/// <summary>
		/// Méthode qui met à jour le comboxVenteStation.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void comboBoxVenteSystem_SelectedIndexChanged(object sender, EventArgs e)
		{
			// Je récupère l'ID du système choisi.
			var idSysteme = (from syst in _dataContext.Systemes
							 where syst.NomSystem == comboBoxVenteSystem.Text
							 select syst.IdSystem).First();

			// Je vais chercher les Stations liés à ce système.
			var stations = (from station in _dataContext.Stations
							where station.IdSystem == idSysteme
							orderby station.NomStation
							select station.NomStation);

			comboBoxVenteStation.Items.Clear();
			comboBoxVenteStation.Text = "";

			foreach (var station in stations)
			{
				comboBoxVenteStation.Items.Add(station);
			}
		}
		#endregion

	}
}
